<?php

namespace Protocols;
// ****{"type":"message","content":"hello all"}
//其中首部四字节*号代表一个网络字节序的unsigned int数据，为不可见字符，紧接着是Json的数据格式的包体数据

class  JsonInt
{
    /**
     * 返回包长度
     * @param $recv_buffer
     * @return int
     */
    public static function input($recv_buffer)
    {
        if (strlen($recv_buffer) < 4) {
            return 0;
        }
        $unpack_date = unpack('Ntotal_length', $recv_buffer);
        return $unpack_date['total_length'];
    }

    public static function encode($data)
    {
        // Json 编码到包体
        $body_json_str = json_encode($data);
        $total_length = 4 + strlen($body_json_str);
        //打包数据
        return pack('N',$total_length).$body_json_str;
    }

    public static function decode($recv_buffer)
    {
        // 去掉 首部2字节,得到包体 json 数据
        $body_json_str = substr($recv_buffer,4);
        // json
        return json_decode($body_json_str,true);
    }

}